# Darren
# 2025年02月12日14时52分52秒

# 2题 数据类型
a = 1
b = 1.2
c = False
d = "hello, world"
e = 'cc'
f = "\\\\\""
print("%d的数据类型是 %s" % (a, type(a)))
print("%f的数据类型是 %s" % (b, type(b)))
print("%d的数据类型是 %s" % (c, type(c)))
print("False的数据类型是 %s" % type(b))
print("%s的数据类型是 %s" % (e, type(e)))
print("%s的数据类型是 %s" % (f, type(f)), end="\n\n")

# 3题 进制转换
Data = 65535
print(f"二进制：{bin(Data)}")  # 二进制
print(f"八进制：{oct(Data)}")  # 八进制
print(f"十六进制：{hex(Data)}", end="\n\n")  # 十六进制

# 4题 1-100 奇数求和
i = 100
s = 0
while i > 0:
    if i % 2 == 1:
        s += i
    i -= 1
print(f"1-100所有奇数之和为{s}", end="\n\n")
print(sum([x for x in range(101) if x % 2 == 1]))

# 5题 九九乘法表
# 使用 for 循环
for i in range(1, 10):
    for j in range(1, i + 1):
        print("%d * %d = %d" % (j, i, i * j), end="\t")  # 添加end参数使得输出不自动换行
    print("\n")

# 使用 while 循环
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print("%d * %d = %d" % (j, i, i * j), end="\t")
        j += 1
    i += 1
    print("\n")


# 6题 整数中1的个数
def num_1(num):
    """
    统计一个整数对应的二进制数的1的个数。
    输入一个整数(可正可负，负数就按64位去遍历即可)，输出该整数的二进制包含1的个数(使用位运算)
    :param num:
    :return:n:
    """
    n = 0  # 统计整数中1的个数
    s = bin(num & (2 ** 64 - 1))[2:]  # 按位相与
    for i in s:  # 计数
        if i == '1':
            n += 1
    return n  # 返回


num = int(input("请输入一个整数"))  # 输入
print(f"这个整数中1的个数：{num_1(num)}")  # 输出
